package com.cleverest.cleverestdiary.service;

import com.cleverest.cleverestdiary.pojo.Schedule;
import com.cleverest.cleverestdiary.pojo.PageBean;

import java.time.LocalDate;


/**
 * 日程服务接口，定义了日程相关的业务操作方法
 */
public interface ScheduleService {
    /**
     * 新增日程
     *
     * @param schedule 要新增的日程对象
     */
    void add(Schedule schedule);

    /**
     * 条件分页列表查询
     *
     * @param pageNum    页码，用于分页查询
     * @param pageSize   每页数量，用于分页查询
     * @param categoryId 日程分类 ID，可选参数
     * @param state      日程状态，可选参数
     * @param emergencyDegree 紧急状态，可选参数
     * @param keyword    搜索关键字，可选参数
     * @return
     */
    PageBean<Schedule> list(Integer pageNum, Integer pageSize, Integer categoryId, Integer state, Integer emergencyDegree, String keyword);

    /**
     * 根据ID查询日程信息
     *
     * @param id 日程ID
     * @return 日程信息
     */
    Schedule findById(Integer id);

    /**
     * 更新日程信息
     *
     * @param schedule 要更新的日程对象
     */
    void update(Schedule schedule);

    /**
     * 删除日程
     *
     * @param id 要删除的日程ID
     */
    void delete(Integer id);

    /**
     * 根据关键字进行日程查找
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @param keyword  关键字
     * @return 包含符合条件的日程列表的 PageBean 对象
     */
    PageBean<Schedule> searchByKeyword(Integer pageNum, Integer pageSize, String keyword);

    /**
     * 更新日程状态信息，使得日程变成“已完成”
     *
     * @param schedule 要更新的日程对象
     */
    void updateState(Schedule schedule);

    /**
     * 根据日期进行日程查找
     *
     * @param date     日期
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 包含符合条件的日程列表的 PageBean 对象
     */
    PageBean<Schedule> searchByDate(LocalDate date, Integer pageNum, Integer pageSize);
}